zapis do souboru z vice aplikaci ve stejnou dobu

Otázka od: david.kopecek@hacktrack.com

5. 5. 2004 11:17

Zdravim konferenci

pred casem jsem tu resil zapis do souboru v jedne multithreadove
aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
podobny problem kdyz potrebuji aby se souborem pracovalo vice
aplikaci.

Cely projekt obsahuje nekolik souboru a muze se skratka stat ze ve
stejnou dobu pristoupi dve aplikace a padne to s errorem.

premyslel jsem nad nejakym zamkem nad souborem ale napadlo me jedine
si data nacist do TStringLIst a pak soubor zamknout

pres filestream
   ff:=TFileStream.Create('d:\temp\test.txt',fmOpenWrite or
fmShareExclusive);

pote az bude komplet ho odemknout a ihned ulozit.. jenze zda se mi to
trapne a je tu dvojnasobna alokace pameti
   
--
S pozdravem a diky
David


Odpovedá: Karel Rys

5. 5. 2004 11:04

david.kopecek@hacktrack.com dne 5 May 2004 v 11:41:

> Zdravim konferenci
>
> pred casem jsem tu resil zapis do souboru v jedne multithreadove
> aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
> podobny problem kdyz potrebuji aby se souborem pracovalo vice
> aplikaci.

Ahoj,

nestacilo by proste, aby kdyz aplikace zapisuje, zkusila soubor otevrit
exkluzivne, a pokud se
nepodari, zkusila to jeste parkrat s nejakym casovym odstupem? Pokud je zapis
kratky a rychly...

Karel Rys


Odpovedá: Tomas Emresz

5. 5. 2004 12:06

dkhc> aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit

A co Mutexy ? Ty snad jsou v ramci serveru, ne v ramci aplikace.
S uspechem je pouzivam na txt logy webovskejch CGI aplikaci..

Koukni na fce :
CreateMutex
WaitForSingleObject

--
S pozdravem,
 Tomas Emresz
 mailto:tomas@emresz.com


Odpovedá: martin.ben@ge.com

5. 5. 2004 11:38

Misto kriticke sekce by jsi mohl pouzit mutexy nebo semafory

Martin Ben

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]On Behalf
Of david.kopecek@hacktrack.com

pred casem jsem tu resil zapis do souboru v jedne multithreadove
aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
podobny problem kdyz potrebuji aby se souborem pracovalo vice
aplikaci.

Cely projekt obsahuje nekolik souboru a muze se skratka stat ze ve
stejnou dobu pristoupi dve aplikace a padne to s errorem.

premyslel jsem nad nejakym zamkem nad souborem ale napadlo me jedine
si data nacist do TStringLIst a pak soubor zamknout

pres filestream
   ff:=TFileStream.Create('d:\temp\test.txt',fmOpenWrite or
fmShareExclusive);

pote az bude komplet ho odemknout a ihned ulozit.. jenze zda se mi to
trapne a je tu dvojnasobna alokace pameti

Odpovedá: Lukas Barton

5. 5. 2004 12:12

Zkus pouzit pojmenovane mutexy. Funguji napric operacnim systemem.


> Zdravim konferenci
>
> pred casem jsem tu resil zapis do souboru v jedne multithreadove
> aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
> podobny problem kdyz potrebuji aby se souborem pracovalo vice
> aplikaci.
>
> Cely projekt obsahuje nekolik souboru a muze se skratka stat ze ve
> stejnou dobu pristoupi dve aplikace a padne to s errorem.
>
> premyslel jsem nad nejakym zamkem nad souborem ale napadlo me jedine
> si data nacist do TStringLIst a pak soubor zamknout
>
> pres filestream
> ff:=TFileStream.Create('d:\temp\test.txt',fmOpenWrite or
fmShareExclusive);
>
> pote az bude komplet ho odemknout a ihned ulozit.. jenze zda se mi to
> trapne a je tu dvojnasobna alokace pameti
>
> --
> S pozdravem a diky
> David


Odpovedá: Karel Rys

5. 5. 2004 12:15

Lukas Barton dne 5 May 2004 v 12:29:

> Zkus pouzit pojmenovane mutexy. Funguji napric operacnim systemem.

Ale bude problem, jakmile do toho souboru budou zapisovat z ruznych stanic, ne?
I kdyz to puvodni
tazatel myslim nezminoval.

Karel Rys


Odpovedá: david.kopecek@hacktrack.com

5. 5. 2004 13:04

Dobry den,
Wednesday, May 05, 2004, 11:43:38 AM, napsal jste:

KR> david.kopecek@hacktrack.com dne 5 May 2004 v 11:41:

>> Zdravim konferenci
>>
>> pred casem jsem tu resil zapis do souboru v jedne multithreadove
>> aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
>> podobny problem kdyz potrebuji aby se souborem pracovalo vice
>> aplikaci.

KR> Ahoj,

KR> nestacilo by proste, aby kdyz aplikace zapisuje, zkusila
KR> soubor otevrit exkluzivne, a pokud se
KR> nepodari, zkusila to jeste parkrat s nejakym casovym
KR> odstupem? Pokud je zapis kratky a rychly...

No tak to mam tedka reseno.

--
S pozdravem,
 david
 david.kopecek@hacktrack.com


Odpovedá: david.kopecek@hacktrack.com

5. 5. 2004 13:06

Dobry den,
Wednesday, May 05, 2004, 12:19:42 PM, napsal jste:

dkhc>> aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit

TE> A co Mutexy ? Ty snad jsou v ramci serveru, ne v ramci aplikace.
TE> S uspechem je pouzivam na txt logy webovskejch CGI aplikaci..

TE> Koukni na fce :
TE> CreateMutex
TE> WaitForSingleObject

Mutexy ja to potrebuji prave v ramci ruznych aplikaci na jednom stroji


--
S pozdravem,
 david
 david.kopecek@hacktrack.com


Odpovedá: david.kopecek@hacktrack.com

5. 5. 2004 12:21

Zdravim

mbgc> Misto kriticke sekce by jsi mohl pouzit mutexy nebo semafory

hmmm nemas nejakej odkaz na kus kodu a nebo prakticke pouziti

David


Odpovedá: david.kopecek@hacktrack.com

5. 5. 2004 12:56

Cau

LB> Zkus pouzit pojmenovane mutexy. Funguji napric operacnim systemem.

ano tenhle vyraz jsem tu slysel mockrat ale nikdo mi noskytl zadnej
example. zatim hledam v helpu


>> Zdravim konferenci
>>
>> pred casem jsem tu resil zapis do souboru v jedne multithreadove
>> aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
>> podobny problem kdyz potrebuji aby se souborem pracovalo vice
>> aplikaci.
>>
>> Cely projekt obsahuje nekolik souboru a muze se skratka stat ze ve
>> stejnou dobu pristoupi dve aplikace a padne to s errorem.
>>


--
S pozdravem,
 david
 david.kopecek@hacktrack.com


Odpovedá: david.kopecek@hacktrack.com

5. 5. 2004 12:44

zDRAVIM

mbgc> Misto kriticke sekce by jsi mohl pouzit mutexy nebo semafory

uz jsem to nasel a uz to i chapu

        MutexHandle := CreateMutex(nil, TRUE, 'MysampleAppMutex');
        if MutexHandle <> 0 then
        begin
          if GetLastError = ERROR_ALREADY_EXISTS then
             // -== set hPrevInst property and close the mutex handle ==-
          begin
               MessageBox(0,
'Instance of this application is already running.',
                             'Application already running', mb_IconHand);




--
S pozdravem,
 david
 david.kopecek@hacktrack.com


Odpovedá: Tomas Emresz

5. 5. 2004 13:38

TE>> A co Mutexy ? Ty snad jsou v ramci serveru, ne v ramci aplikace.
TE>> S uspechem je pouzivam na txt logy webovskejch CGI aplikaci..

TE>> Koukni na fce :
TE>> CreateMutex
TE>> WaitForSingleObject

dkhc> Mutexy ja to potrebuji prave v ramci ruznych aplikaci na jednom stroji

Vzdyt jo createmutexu predas jmeno mutexu a ten je definovan v ramci
celeho stroje, tzn ruzny app nevadi, pokud obe maj stejny jmeno
mutexu, nebude to kolidovat...

--
S pozdravem,
 Tomas Emresz
 mailto:tomas@emresz.com